home *** CD-ROM | disk | FTP | other *** search
- unit dpoBase;
-
- interface
-
- uses
- Forms, DBTables, Classes, Db;
-
- type
- TDataObject = class;
- TDataObjectClass = class of TDataObject;
-
- TDataObject = class(TDataModule)
- qryMain: TQuery;
- private
- protected
- OIDFieldNames: TStringList;
- function GetModified: Boolean;
- function GetOID: string;
- procedure InternalSetOID(aOID: string); virtual;
- public
- constructor Create(aDB: TDatabase); reintroduce; virtual;
- destructor Destroy; override;
- procedure Delete; virtual;
- procedure GetByOID(aOID: string);
- function PropertyByName(aName: string): TField;
- procedure EditMode; virtual;
- procedure Save; virtual;
- property Modified: Boolean read GetModified;
- property OID: string read GetOID;
- end;
-
- implementation
-
- {$R *.DFM}
-
- uses
- SysUtils;
-
- { TDataObject }
-
- constructor TDataObject.Create(aDB: TDatabase);
- begin
- inherited Create(nil); { do not set owner }
- qryMain.DatabaseName := aDB.DatabaseName;
- OIDFieldNames := TStringList.Create;
- end;
-
- procedure TDataObject.Delete;
- begin
-
- end;
-
- destructor TDataObject.Destroy;
- begin
- OIDFieldNames.Free;
- inherited;
- end;
-
- procedure TDataObject.EditMode;
- begin
- if not (qryMain.State in dsEditModes) then
- qryMain.Edit;
- end;
-
- procedure TDataObject.GetByOID(aOID: string);
- begin
- with qryMain do
- begin
- if Active then Close;
- InternalSetOID(aOID);
- Open;
- FetchAll;
- end;
- end;
-
- function TDataObject.GetModified: Boolean;
- begin
- Result := qryMain.Modified;
- end;
-
- function TDataObject.GetOID: string;
- var
- I: Integer;
- begin
- Result := '';
- for I := 0 to OIDFieldNames.Count - 1 do
- Result := Result + VarAsType(qryMain.FieldByName(OIDFieldNames[I]).Value, varString);
- end;
-
- procedure TDataObject.InternalSetOID(aOID: string);
- var
- I: Integer;
- begin
- with TStringList.Create do
- try
- CommaText := aOID;
- for I := 0 to OIDFieldNames.Count - 1 do
- qryMain.ParamByName(OIDFieldNames[I]).Value := Strings[I];
- finally
- Free;
- end;
- end;
-
- function TDataObject.PropertyByName(aName: string): TField;
- begin
- Result := qryMain.FindField(aName);
- if not Assigned(Result) then
- raise Exception.CreateFmt('Invalid property name: %s.%s', [ClassName, aName]);
- end;
-
- procedure TDataObject.Save;
- begin
- qryMain.Post;
- end;
-
- end.
-